package point

import (
	"errors"
	"feng-che.com/server/driver-quiz/internal/constants"
	"go.mongodb.org/mongo-driver/bson/primitive"
	"time"
)

// Point 用户的积分
type Point struct {
	Amount   int                 `json:"amount" bson:"amount"`
	ClintID  primitive.ObjectID  `json:"-" bson:"clint_id"`
	Phone    string              `json:"-" bson:"phone"`
	Type     constants.PointType `json:"type" bson:"type"` //积分类型,即积分产生的分类,也许一个客户可以有多种类型积分
	UpdateAt time.Time           `json:"updateAt" bson:"update_at"`
	Expires  time.Time           `json:"expires" bson:"expires"` //积分过期时间,年分小于2000年认为无过期时间设置
}

// MethodOfPoint 积分的方法
type MethodOfPoint interface {
	Add() (amount int, err error)    //增加积分
	Sub() (amount int, err error)    //减少积分
	Usage() []constants.UsageOfPoint /// 积分可以使用在什么方面
	CanUseToBuy(string) bool         //可以使用来兑换商品不
}

// CreatePointForClient 创建空白的用户基础积分
func CreatePointForClient(clientID primitive.ObjectID, phone string) (newPoint *Point, err error) {
	if clientID.IsZero() || len(phone) < 11 {
		return nil, errors.New("必须传入客户id和手机号码")
	}
	newPoint = &Point{
		Amount:   0,
		ClintID:  clientID,
		Phone:    phone,
		Type:     constants.PayPoint,
		UpdateAt: time.Now(),
		Expires:  time.UnixMicro(0),
	}
	return newPoint, nil
}
